6. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ 2 (๋…ธ๋“œ ์‚ฝ์ž…)

7/16/2025

๋™์  ๋ฐฐ์—ด

๋ฐฐ์—ด์˜ ๋‹จ์ ์ธ '๊ณ ์ •๋œ ํฌ๊ธฐ'๋ฅผ ํ•ด๊ฒฐํ•œ ๋ฐฐ์—ด.
๋ฐฐ์—ด์ด ๋‹ค ์ฐจ๋ฉด ๋‘ ๋ฐฑ์˜ ํฌ๊ธฐ์˜ ์ƒˆ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ , ๊ธฐ์กด์˜ ๋ณ€์ˆ˜๋“ค์„ ๋ณต์‚ฌํ•ด์„œ ๋„ฃ๋Š”๋‹ค.
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฐ์—ด์˜ ๊ณต๊ฐ„์ด ๋ฐ˜ ์ด์ƒ ๋‚จ์œผ๋ฉด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ธ๋‹ค.

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

  • ์žฅ์ . ์ƒ์ˆ˜ ์‹œ๊ฐ„ ์•ˆ์— ํ™•์žฅ ๊ฐ€๋Šฅ
    ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋™์  ๋ฐฐ์—ด๋„ ํ™•์žฅ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์›๋ž˜ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํ™•์žฅํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. nํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ํ™•์žฅ(์›๋ž˜ ๋ณ€์ˆ˜๋“ค์„ ๋ณต์‚ฌ)ํ•˜๋Š”๋ฐ O(n)๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
    ๊ทธ๋Ÿฌ๋‚˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์ƒˆ๋กœ์šด ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๋Š” ์‹œ๊ฐ„๋งŒ ํ•„์š”ํ•˜๋‹ˆ๊นŒ ํ•ญ์ƒ ์ผ์ •ํ•œ ์‹œ๊ฐ„๋งŒ ์†Œ์š”๋œ๋‹ค.
  • ๋‹จ์ . ๊ฐœ๋ณ„ ํ•ญ๋ชฉ์— ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ธธ๋‹ค.
    pint(myArray[300])์ด๋ผ๊ณ  ํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๊ธฐ๋ณธ ์ฃผ์†Œ์— offset(size * index)๋ฅผ ๋”ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ์œผ๋กœ ๋ฐ”๋กœ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    ๊ทธ๋Ÿฌ๋‚˜ print(myLinkedList[300])์ด๋ผ๊ณ  ํ•˜๋ฉด 0๋ฒˆ์งธ -> 1๋ฒˆ์งธ -> 2๋ฒˆ์งธ -> .... ์ด๋ ‡๊ฒŒ 299๋ฒˆ์งธ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ฝ๊ณ  ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋Š”๊ฒƒ. O(n)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

    ๋ฐฐ์—ด์˜ locality
    cpu์˜ ๊ณ„์‚ฐ์†๋„๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ cpu๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์†๋„๋ณด๋‹ค ์›”๋“ฑํžˆ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— cpu ์•ˆ์— ์žˆ๋Š” cache์˜์—ญ(๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋‹ค)์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  cpu๋Š” ๊ฑฐ๊ธฐ์„œ ์—ฐ์‚ฐํ•  ์ž๋ฃŒ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค.
    ๊ทธ๋Ÿฐ๋ฐ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ ์š”์†Œ๋“ค์ด ํฉ์–ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์บ์‹œ๋กœ ๊ฐ€์ ธ๊ฐˆ ๋•Œ ๋ฉ€๋ฆฌ์žˆ๋Š”๊ฑด ๋นผ๋†“๊ณ  ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ณ (missing ํ•œ๋‹ค๊ณ  ํ‘œํ˜„) ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์—ฐ์‚ฐ ์†๋„๊ฐ€ ๋А๋ ค์ง„๋‹ค.

  • ๋‹จ์ . ์ถ”๊ฐ€์ ์ธ ์ฐธ์กฐ ํฌ์ธํ„ฐ๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋‚ญ๋น„
    (๊ฐ’/ํฌ์ดํ„ฐ) -> (๊ฐ’/ํฌ์ธํ„ฐ) -> .... ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— ํฌ์ธํ„ฐ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ.

Singly Linked List

์ผ๋ฐ˜์ ์ธ '๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ'๋Š” ์ฃผ๋กœ ์ด๊ฑธ ์ง€์นญํ•œ๋‹ค.
head -> (๊ฐ’/ํฌ์ธํ„ฐ) -> (๊ฐ’/ํฌ์ธํ„ฐ) -> .... -> (๊ฐ’/null)

์‚ฝ์ž…

head->7->14->25->36 ์ฒ˜๋Ÿผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ˆซ์ž๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค.

๋งจ ์•ž์—

3์„ ๋„ฃ์œผ๋ ค๋ฉด ๋งจ ์•ž์— ๋„ฃ์–ด์•ผํ•œ๋‹ค.

  1. ์ƒˆ ๋…ธ๋“œ (3 ๋…ธ๋“œ)๋ฅผ ๋งŒ๋“ค๊ณ 
  2. 7 ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ—ค๋”๋ฅผ 3์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ฐ”๊พธ๊ณ 
  3. 3 ๋…ธ๋“œ๊ฐ€ 7 ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค. ์ด ๋ฐฉ๋ฒ•์ด๋ฉด ์ถฉ๋ถ„ํ•œ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๋‚˜. 2๋ฒˆ ๋‹จ๊ณ„์—์„œ ํ—ค๋“œ๊ฐ€ 7 ๋…ธ๋“œ ๋Œ€์‹  3๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด์„œ 7 ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์€ ์•„๋ฌด๋„ ๋ชจ๋ฅด๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ 3 ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ ์ฃผ์†Œ๋ฅผ ๋ชฐ๋ผ์„œ 3๋ฒˆ ๋‹จ๊ณ„๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค.
  4. ์ƒˆ ๋…ธ๋“œ(3 ๋…ธ๋“œ)๋ฅผ ๋งŒ๋“ค๊ณ 
  5. 3๋…ธ๋“œ๊ฐ€ 7๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜๊ณ 
  6. ํ—ค๋“œ๊ฐ€ 7 ๋Œ€์‹  3 ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.
    (์œ„์˜ 2๋ฒˆ๊ณผ 3๋ฒˆ์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พผ๋‹ค.)

๋งจ ๋’ค์—

50์„ ๋„ˆ์œผ๋ ค๋ฉด ๋งจ ๋’ค์— ๋„ฃ์–ด์•ผํ•œ๋‹ค.

  1. ์ƒˆ ๋…ธ๋“œ(50 ๋…ธ๋“œ)๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ํฌ์ธํ„ฐ๊ฐ€ null์ธ 36 ๋…ธ๋“œ์— ๋„์ฐฉ.
  3. 36 ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ์— null์ด ์•„๋‹Œ 50 ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ ์ž…๋ ฅ.

์ค‘๊ฐ„์—

20์ด๋ผ๋А ์ˆซ์ž๋Š” 14์™€ 25์‚ฌ์ด์— ์œ„์น˜ํ•ด์•ผํ•œ๋‹ค.
์ด ๊ฒฝ์šฐ๋Š” ์‚ฌ์‹ค ์œ„์—์„œ ๋ณธ ๋งจ ์•ž์— ์‚ฝ์ž…ํ•˜๋Š”๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

  1. ์ƒˆ ๋…ธ๋“œ(20)์„ ๋งŒ๋“ค๊ณ 
  2. 20 ๋…ธ๋“œ๊ฐ€ 25 ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜๊ณ 
  3. 14 ๋…ธ๋“œ๊ฐ€ 20 ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ด์•ผํ•œ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 14๋…ธ๋“œ๊ฐ€ 25๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด 25 ์ฃผ์†Œ๊ฐ’์€ ํ”„๋กœ๊ทธ๋žจ์ƒ์—์„œ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € 20๋…ธ๋“œ๊ฐ€ 25๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

์ฝ”๋“œ ์˜ˆ์‹œ

์ˆ˜์—…์ค‘์—๋Š” c์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์„ค๋ช…ํ•˜์‹œ๋Š”๋ฐ ๊ทธ๊ฑธ ๊ตณ์ด ๋ฐ›์•„ ์ ์ง€๋Š” ์•Š๊ฒ ๋‹ค.

c์–ธ์–ด๋Š” call by value
void swap(int a, int b){...}๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ swap(p,q)๋ผ๊ณ  ํ˜ธ์ถœํ•˜๋ฉด p์™€ q์˜ ์ฃผ์†Œ๊ฐ’์„ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  ์‹ค์ œ p์™€ q์˜ ๊ฐ’(์ˆซ์ž)๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ค€๋‹ค.
swap() ํ•จ์ˆ˜์˜ ๋ชฉ์ ์ด p์™€ q์˜ ๊ฐ’์„ ์„œ๋กœ ๋ฐ”๊ฟ”์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๊ทธ๊ฑธ ํ˜ธ์ถœํ•œ ์ƒ์œ„ ํ•จ์ˆ˜์—์„œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ p์™€ q์˜ ํฌ์ธํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.

์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” Insert() ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
์™œ?
๋งจ ์•ž์— ๋„ฃ๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๋ฉด, ํ—ค๋“œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํฌ์ธํ„ฐ์˜ ๊ฐ’์„ ์ƒˆ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—. ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹Œ ๊ทธ๋ƒฅ ์ฃผ์†Œ๊ฐ’ ์ž์ฒด๋ฅผ ๊ฑด๋‚ด์ฃผ๋ฉด ์ƒˆ ๋…ธ๋“œ๊ฐ€ ๊ธฐ์กด ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•  ์ˆ˜๋Š” ์žˆ๊ฒ ์ง€๋งŒ ํ—ค๋“œ๊ฐ€ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋งŒ๋“ค ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.